/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.cast.teseg.dao;
import edu.cast.teseg.controladores.Controlador;


import edu.cast.teseg.controladores.InterfaceControlador;
import edu.cast.teseg.gui.GuiPrincipal;
import edu.cast.teseg.modelo.RedSocial;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

/**
 *
 * @author edgarin
 */

public class lineaPorlineaDAO implements InterfaceControlador{
    private Controlador controlGL;
    

    public lineaPorlineaDAO(){}
    
    //*** metodo para instancionar el controlador ***//
    @Override
    public void setControlador(Controlador x){ this.controlGL = x; }
    
    //*** metodo para leer el archivo de texto ***// 
    public void abrirArchivo(File x) {       
        RedSocial grafoRed = new RedSocial(); 
        boolean haga2 = false;
        boolean haga = false;
        String linea = "";
        try {            
            FileInputStream fis = new FileInputStream(x);
            DataInputStream dis = new DataInputStream(fis);
            BufferedReader br = new BufferedReader(new InputStreamReader(dis, "UTF-8"));            
            int numE = 0;
            int numV = 0;
            
            while((linea = br.readLine()) != null){   // aqui se crean los vertices y aristas
                
                //linea = linea.replaceAll(" ", "");
                String v1 = "";                                
                String v2 = "";
                numV++;
                
                String[] c = linea.split(" ");
                if(c.length>2){
                    this.controlGL.setMensajeErrores("error al leer Archivo");
                    break;
                }
                v1 = c[0];
                v2 = c[1];
                
                haga = this.controlGL.isNumeric(v1);
                haga2 = this.controlGL.isNumeric(v2);
                
                if(haga && haga2){
                    grafoRed.setIndividuo(Integer.parseInt(v1), "Nombre "+v1);
                    grafoRed.setIndividuo(Integer.parseInt(v2), "Nombre "+v2);
                    grafoRed.setRelaciones("E"+numE, Integer.parseInt(v1), Integer.parseInt(v2));
                    numE++;                
                }                
                else if(!haga || !haga2){
                    this.controlGL.setMensajeErrores("error al leer Archivo datos no numericos o no enteros");
                    break;                     
                }      
            }
            
            if (haga && haga2) {
                grafoRed.setMatrizAdj();
                grafoRed.cargarMatriz();
                this.controlGL.configurarAlgoritmo(grafoRed);                
            }
            
            fis.close();
            dis.close();
            br.close();
        } catch (Exception ex) {
            this.controlGL.setMensajeErrores("error al crear la matriz de adjacencia");
        }
        
    }
    
    //*** metodo que separa las lineas por espacios en blanco ***//
    public String[] separaEspacios(String linea, int num){      
        String[] retorno = new String[num];
        StringBuilder indice = new StringBuilder();
        int contador = 0;

        for(int i = 0; i < linea.length(); i++){
            if(linea.charAt(i) != ' ')
                indice.append(Character.toString(linea.charAt(i)));
            else{
                contador++;
                indice = new StringBuilder();
                continue;
            }
             
            if(!this.controlGL.isNumeric(indice.toString())){                
                this.controlGL.setMensajeErrores("error al leer Archivo datos no numericos o no enteros");
                break; 
            }
             
            retorno[contador] = indice.toString();           
        }       
        
        return retorno; 
    }
   
    //*** metodo que guarda el grafo en un archivo de texto ***//  falta terminar 
 /*   public void escribirArchivoRespuestas(File archivoASalvar, String ejemplos){
        try {            
            FileWriter fr = new FileWriter(archivoASalvar);
            BufferedWriter bf = new BufferedWriter(fr);
            
            String[] split = ejemplos.split("l");
            
            for (int i = 0; i < split.length-1; i++) {                
                  bf.write(ejemplos.split("l")[i]);
                  bf.newLine();
            }    
            bf.write(split[split.length-1]);
            bf.flush();
            bf.close();
            fr.close();
        } catch (IOException ex) {
            this.controlGL.setMensajeErrores("Error al escribir Archivo");
        }        
    }
*/
    @Override
    public void setGuiPrincipal(GuiPrincipal frameGui) {}
           
}